package com.ilink.ilinkcommon.log.courseaccess;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 使用Spring AOP实现的日志切面类，
 * 用于在方法执行后记录日志
 * @author dzy
 */
@Slf4j
@Component
@Aspect
public class CourseAccessLogAspect {
    /**
     * 定义一个切点，该切点匹配所有被@MethodLog注解标记的方法
     */
    @Pointcut("@annotation(com.ilink.ilinkcommon.log.courseaccess.CourseAccessLog)")
    public void courseAccessLog(){}

    /**
     * 在方法执行之前记录日志的切面方法
     * @param joinPoint 切入点，用于获取连接点（目标方法）的相关信息
     */
    @Before("courseAccessLog()")
    public void logBefore(JoinPoint joinPoint) {
        Long courseSourceId = (Long) joinPoint.getArgs()[0];
        Date date = new Date();
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String formattedDate = formatter.format(date);
        log.info("访问课程资源id:{} 时间:{}", courseSourceId, formattedDate);
    }

}
